////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//  Filename:    MisterMoneyGuts.h                                            //
//  Developer:   George Chapman                                               //
//  Create date: 06/02/2005                                                   //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//  Description: This is the class definition for the slot gut for the        //
//               Australian Slot machine called Mister Money.                 //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////
//        Copyright (c) 2005 - Realtime Gaming.  All rights reserved.         //
////////////////////////////////////////////////////////////////////////////////

#ifndef MISTERMONEYGUTS_H
#define MISTERMONEYGUTS_H

////////////////////////////////////
// Include Files                  //
////////////////////////////////////
#include "slotguts.h"
#include "getrand.h"

class MisterMoneyGuts : public SlotGuts
{
	// Shared enums between client and server
	#include "MisterMoneyCommon.h"

public:
	MisterMoneyGuts();			  // Default Constructor
	virtual ~MisterMoneyGuts();  // Destructor

	// Overrides of virtual functions from SlotsGuts.
	virtual void  classifyStops(SpinLine* spinline, uint8* stops,uint8 bet, uint8 line, uint8& rtnresult, uint8& multiplier);
	virtual void  classifyScatters(SlotSpin *spin);
	virtual bool8 isValidGuts();
	virtual void  getGameModeMultiplierAndNoteId( uint8& nGameModeMultiplier, uint8& nNoteId );
	virtual bool8 processClientData(uint8 bonusGameType, int32 bonusDataCount, int32 *bonusData);

protected:

	virtual bool8 hasSavedGames();
	void		  initializePickFeatureGame(int32 numRedDiamonds);
	void		  setFeatureGameMultiplier(int32 nFeatureGameMultiplier);
	int32		  getFeatureGameMultiplier() const;
	void		  setFeatureGamePositionMask(int32 nMask);
	int32		  getFeatureGamePositionMask() const;
	void          setFeatureGamePositionSelected( int32 nPosition, bool8 bSelected );
	bool8		  getFeatureGamePositionSelected( int32 nPosition ) const;
	void		  setFeatureGameNumPicks(int32 nNumPicks);
	int32		  getFeatureGameNumPicks() const;
	int32		  getFeatureNumBagsSelected() const;
	void		  setFeatureGamePickPosition(int32 nIndex, int32 nPickPosition);
	int32		  getFeatureGamePickPosition(int32 nIndex) const;		
	void		  setFeatureGamePickType(int32 nIndex, int32 nPickType);
	int32		  getFeatureGamePickType(int32 nIndex) const;
	void		  incrementFeatureGameMultiplier();

	int32         m_numPicks;
	int32         m_multipliers;
	int32         m_freeGames;

	virtual void preSpinClassifyResults(SlotSpin *spin);	

	virtual void initDebugFunctionMap();

	enum
	{
		EVT_DEBUG_FUNCTION_PICK_SPINS = BEGIN_SUB_MODIFY_NEXT_RESULT_FUNCTION_RANGE,
		EVT_DEBUG_FUNCTION_PICK_MULT,
	};

	void DebugFeature_PickSpins(SlotSpin *spin );
	void DebugFeature_PickMult(SlotSpin *spin );

	static int g_nDebugPick;
	static int g_nDebugPickPrizes[MAX_MONEY_BAG_PICKS];

};
#endif //[#ifdef MISTERMONEYGUTS_H]